iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0

簡介

Python 提供了眾多套件,使得開發者能輕鬆構建各類應用程式。因此,開發者撰寫的程式碼中,通常會匯入(import)大量套件。然而,未經排序的匯入語句會讓程式碼顯得雜亂無章,從而增加閱讀和維護的難度。舉例來說,當開發者修改程式碼時,若匯入語句未排序,便難以快速確定某個模組是否已經匯入,這可能導致重複匯入的問題。

此外,套件的來源可能分為標準庫、第三方庫或本地模組,而根據這些來源,開發者往往會採取不同的錯誤處理方式。若套件來自標準庫,通常代表其可靠且經過嚴格測試,因此出現問題時,往往是使用錯誤所致;相對地,若問題出現在第三方庫,則可能需要檢查版本更新或兼容性。未排序的匯入語句會讓開發者耗費更多時間來理解每個匯入的來源,從而降低處理錯誤的效率。

本文將介紹一個名為 Isort 的工具,它專門用來統一整理程式碼中的匯入語句。Isort 根據字母順序排列匯入,並將標準庫、第三方庫和本地模組分組處理,這能有效避免由於匯入順序雜亂引發的問題。類似於 Black,Isort 也被許多整合式開發環境(如 Visual Studio Code)所支援,每當開發者編輯並儲存程式碼時,Isort 會自動幫助整理匯入語句。

接下來,我將透過範例來示範 Isort 工具。

範例

本次範例使用的是 Isort 5.13.2 版本

poetry add isort==5.13.2

下方的範例 main.py 展示了未排序的匯入情況。當開發者需要額外從 flask 套件匯入 render_template 來呈現 HTML 時,必須從頭開始逐一檢查每個匯入語句,才能找到 flask 套件的匯入位置。此外,未排序的匯入語句讓開發者無法快速判斷某個模組的來源。比如,無法輕易辨別 functools 是標準庫還是第三方庫,或者 settings 是本地模組還是標準庫。這樣的情況拖慢了處理錯誤和修改代碼的效率。

import jwt
from functools import lru_cache
import requests
from flask import Flask
from __future__ import annotations
import logging
from settings import Settings
settings =  Settings()
...

我們可以通過 IDE 的自動排序功能或手動輸入指令 poetry run isort main.py 來對匯入進行排序。下方是排序後的結果,總共可以分為四個區塊:

  1. future 的匯入:這部分具有特殊用途,因此會獨立成一區。
  2. 標準庫模組:這一區包含所有標準庫的模組,並依照字母順序進行排序。
  3. 第三方庫模組:這一區包含所有第三方庫的模組,亦是依照字母順序排列。
  4. 本地模組:最後一區則是本地模組,同樣依照字母順序排序。

此外,值得一提的是,匯入語句與 settings = Settings() 之間有一行的空白間隔,這是為了清楚區分匯入語句與業務邏輯語句。

from __future__ import annotations

import logging
from functools import lru_cache

import jwt
import requests
from flask import Flask

from settings import Settings

settings =  Settings()
...

上一篇
[Day 20] Black
下一篇
[Day 22] Ruff
系列文
Python 不止於數據,開發應用程式它也在行!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言